@局外人
4年前 提问
1个回答

漏洞挖掘技术有哪些

安全侠
4年前
官方采纳

每一个漏洞都有多个特征,而根据不同的特征可以将漏洞按照不同的方式分类。一般情况下,漏洞信息应包括漏洞名称、漏洞成因、漏洞级别、漏洞影响、受影响的系统、漏洞解决方案、漏洞利用类型和漏洞利用方法等。

1.二进制比对技术

二进制比对技术又可称为补丁比对技术,它主要是被用以挖掘已经发现的漏洞,因此在一定意义上也可被认为是一种漏洞分析技术。由于安全公告中一般都不指明漏洞的确切位置和成因,使得漏洞的有效利用比较困难。但漏洞一般都有相应的补丁,所以可以通过比较补丁前后的二进制文件,确定漏洞的位置和成因。补丁比较主要包括源码补丁比较和二进制补丁比较两种。

2.测试技术

白盒测试

白盒测试是基于源码的测试技术,直接面对程序中的数据和算法,进行控制流分析和数据流分析。在此需要说明的是,很多漏洞都是数据和算法共同造成的,并非单是数据或者算法的原因。控制流分析一般要得出程序的控制流图,就是程序的调用、跳转结构,是程序从入口到出口的路径图。数据流分析一般是跟踪数据的产生、传输、处理和存储等。在安全性测试的应用中,这两种分析方法应该结合。下面以针对数组越界的测试进行分析。

黑盒测试

在软件的设计和开发过程中,无论是设计者还是开发者都会作一个隐含假设,即软件存在输入域,用户的输入会限定在该输入域中。然而在软件的实际应用中,没有可以将用户的输入限制在一定范围内的机制,特别是一些恶意用户,他们会通过各种方法寻找输入域之外值,以期发现软件的漏洞。黑盒测试就是利用各种输入对程序进行探测,并对运行程序进行分析,以期发现系统漏洞的测试技术。这种测试技术仅仅需要运行的程序而不需要分析任何源代码,测试者对软件内部一无所知,但是清楚地知道软件能做什么,能够对程序基于输入和输出的关联性进行分析。
黑盒测试最关键的问题是测试数据的选取。既然知道软件能做什么,那么也就大概知道该软件的安全输入域的范围。所以测试最好是选择软件安全输入域之外的数据。当然这还是不够的,测试人员必须有知识和经验的积累,例如,溢出漏洞在漏洞总量中占了很大比例,并且这类漏洞多是由特殊字符或者超长字符串导致的,如果分析总结以往溢出漏洞的利用方法,研究这些超长字符或者特殊字符串的构造方式,同样有利于测试数据的选取。

灰盒测试

灰盒测试综合了白盒测试和黑盒测试的优点。灰盒测试表现为与黑盒测试相似的形式,然而测试者具有程序的先验知识,它对于程序的结构和数据流都有一定的认识。这种测试可以直接针对数据流中感兴趣的边界情况进行测试,从而比黑盒测试更高效。典型的灰盒测试有二进制分析,二进制分析往往首先通过逆向过程(ReversEngineering,RE )来获得程序的先验知识,然后通过反编译器、反汇编器等辅助工具确定有可能出现漏洞的行,反向追踪以确定是否有利用的可能性。常用的反汇编器有IDA Pro,反编译器有Boomerang,调试器有OllyDbg、WinDbg等。灰盒测试具有比黑盒测试更好的覆盖性,然而逆向工程非常复杂, 要求熟悉汇编语言、可执行文件格式、编译器操作、操作系统内部原理以及其他各种各样的底层技巧。